﻿using System;
using System.Linq;
using System.Web.Mvc;
using System.Collections.Generic;

namespace Caramel.Web.Mvc.Validation
{
	public class FluentModelValidatorProvider : AssociatedValidatorProvider
	{
		public FluentModelValidatorProvider(
			FluentModelValidatorContainer fluentValidator,
			AutoModelValidatorContainer autoValidator)
		{
			this.FluentValidator = fluentValidator;
			this.AutoValidator = autoValidator;
		}

		public static bool AddImplicitRequiredAttributeForValueTypes { get; set; }

		private FluentModelValidatorContainer FluentValidator { get; set; }

		private AutoModelValidatorContainer AutoValidator { get; set; }

		protected override IEnumerable<ModelValidator> GetValidators(ModelMetadata metadata, ControllerContext context, IEnumerable<Attribute> attributes)
		{
			var validators = new List<ModelValidator>();

			//this.FluentValidator.Apply(
			//validators.
			//    Add(
			//        new RequiredModelValidator(
			//            metadata,
			//            context
			//        )
			//    );


			return validators;
		}




		//    private const string VALIDATOR_KEY_PREFIX = "__Validator-";

		//    public static bool AddImplicitRequiredAttributeForValueTypes { get; set; }

		//    static FluentModelValidatorProvider()
		//    {
		//        FluentModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = true;
		//    }

		//    public FluentModelValidatorProvider()
		//    {
		//    }

		//    public static string GenerateValidatorKey(string validator)
		//    {
		//        return String.Format("{0}-{1}", VALIDATOR_KEY_PREFIX, validator);
		//    }

		//    protected override IEnumerable<ModelValidator> GetValidators(ModelMetadata metadata, ControllerContext context, IEnumerable<Attribute> attributes)
		//    {
		//        var validators = new List<ModelValidator>();




		//        //if (FluentModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes && metadata.IsRequired)
		//        //{
		//        //    validators.
		//        //        Add(
		//        //            new RequiredModelValidator(metadata, context)
		//        //        );
		//        //}

		//        //var values =
		//        //    metadata.
		//        //        AdditionalValues.
		//        //        Where(p => p.Key.StartsWith(VALIDATOR_KEY_PREFIX));




		//        return validators;
		//    }
		//}
	}
}
